當你在實作一個模組,若過公開全部的參數介面,那其實就失去模組化的意義了,因為你等於將全部的操作都交給外部參數,就跟沒模組化一樣。
像以下是個計算點擊次數的模組
const clickTimes = {
times:0,
increment(){
times++;
}
decrement(){
times--;
}
read(){
return times;
}
}
export const {increment,decrement, read} = clickTimes;
// 這邊只公開 increment,decrement, read 的取用方式,避免外部使用者使用 times
像前幾章我們有提到 function 裡面的狀態因為來自外部,所以會造成 side project 的問題,而當
狀態越來越多,程式碼越多越多就越難以管理,這時候我們就需要 pure function 的寫法。
例如我們有個計算數值相加的函式
let books = 10;
let pen = 200;
const sumProduct = ()=>{
return books+pen;
}
sumProduct();
// 注意到了嗎?假設我們的 books 和 pen 會被其他程式影響,
// 那我們用 sumProduct 計算出來的數量永遠會不正確
以上是不純的函數,因為 sumProduct 會受到 books 和 pen 的狀態影響
那純函數怎麼實作呢?我們要確保函式只負責 imput 然後執行功能 output 這樣,
以下是純函式:
const sum = (numbers)=>{
return numbers.reduce((total,current)=>total+current,0);
}
sum([books,pen])
這樣的寫法是不是乾淨許多, sum 只要專注傳入的數值,加總後呈現應該有的結果,
過程中不管狀態,只專注在功能,這樣就是純函式,其實他也是設計模式的工廠模式。